package com.common.dao;

import java.util.List;

public interface BaseDAO<T> {

	/**
	 * 
	 * @方法说明:保存对象信息
	 * @param t
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract boolean save(T t,String pkid);

	/**
	 * 
	 * @方法说明:保存或修改对象信息
	 * @param t
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract boolean saveOrUpdate(T t,String pkid);

	/**
	 * 
	 * @方法说明:修改对象信息
	 * @param t
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract boolean update(T t);

	/**
	 * 
	 * @方法说明:通过修改语句及相对于的参数值修改对象数据
	 * @param queryString
	 *            修改语句
	 * @param paramValue
	 *            相对于的参数值
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract boolean update(String queryString, Object[] paramValue);

	/**
	 * 
	 * @方法说明:删除对象信息
	 * @param t
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract boolean delete(T t);

	/**
	 * 
	 * @方法说明:通过ID来删除对象
	 * @param c
	 *            对象Class
	 * @param id
	 *            对象ID
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract boolean delete(Class<T> c, String id);
	
	/**
	 * 
	  * 
	  * 
	  * @方法说明: 批量删除
	  * @param str
	  * @return
	  * @作者:徐龙
	  * @日期:2012-6-2
	 */
	public boolean deleteByids( String sql, String[] str) ;
	
	/**
	 * 
	 * 
	 * @方法说明:软删除，仅更新DR字段为0
	 * @param c
	 * @param id
	 * @return
	 * @作者:伍文剑
	 * @日期:2011-6-14
	 */
	public abstract boolean symbolDelete(Class<T> c, String id);

	/**
	 * 
	 * @方法说明:通过删除语句及相对于的参数值删除对象数据
	 * @param queryString
	 *            删除语句
	 * @param paramValue
	 *            相对于的参数值
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract boolean delete(String queryString, Object[] paramValue);

	/**
	 * 
	 * @方法说明:通过对象ID得到对象信息
	 * @param c
	 *            对象Class
	 * @param id
	 *            对象ID
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract T get(Class<T> c, String id);

	/**
	 * 
	 * @方法说明: 通过查询语句得到对象列表信息
	 * @param queryString
	 *            查询语句
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract List<T> find(String queryString);

	/**
	 * 
	 * @方法说明:通过查询语句和查询条件相对应的值得到对象列表信息
	 * @param queryString
	 *            查询语句
	 * @param paramValue
	 *            查询条件相对应的值
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract List<T> find(String queryString, Object paramValue);

	/**
	 * 
	 * @方法说明: 通过查询语句和查询条件相对应的值得到对象列表信息
	 * @param queryString
	 *            查询语句
	 * @param paramValue
	 *            查询条件相对应的值
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract List<T> find(String queryString, Object[] paramValue);

	/**
	 * 
	 * @方法说明: 通过多个查询语句和查询条件及相对应的值得到对象列表信息
	 * @param queryString
	 *            查询语句
	 * @param paramName
	 *            查询条件
	 * @param paramValue
	 *            查询条件相对应的值
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract List<T> findByNamedParam(String queryString,
			String[] paramName, Object[] paramValue);

	/**
	 * 
	 * @方法说明:通过查询语句得到对象列表信息从中first开始取len条
	 * @param queryString
	 *            查询语句
	 * @param first
	 *            开始位置
	 * @param len
	 *            长度
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract List<T> find(String queryString, int first, int len);

	/**
	 * 
	 * @方法说明:通过查询语句得到对象列表信息从中first开始取len条
	 * @param queryString
	 *            查询语句
	 * @param paramValue
	 *            查询条件相对应的值
	 * @param first
	 *            开始位置
	 * @param len
	 *            长度
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract List<T> find(String queryString, Object[] paramValue,
			int first, int len);

	/**
	 * 
	 * @方法说明: 通过查询语句得到对象列表信息从中first开始取len条
	 * @param queryString
	 *            查询语句
	 * @param paramName
	 *            查询条件
	 * @param paramValue
	 *            查询条件相对应的值
	 * @param first
	 *            开始位置
	 * @param len
	 *            长度
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract List<T> find(String queryString, String paramName,
			Object paramValue, int first, int len);

	/**
	 * 
	 * @方法说明: 通过查询语句得到对象列表信息从中first开始取len条
	 * @param queryString
	 *            查询语句
	 * @param paramName
	 *            查询条件
	 * @param paramValue
	 *            查询条件相对应的值
	 * @param first
	 *            开始位置
	 * @param len
	 *            长度
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract List<T> findByNamedParam(String queryString,
			String[] paramName, Object[] paramValue, int first, int len);

	/**
	 * 
	 * @方法说明:通过查询语句得到满足结束的条件
	 * @param queryString
	 *            查询语句
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract Long getCount(String queryString);

	/**
	 * 
	 * @方法说明:通过查询语句、查询条件及相对的值得到满足结束的条件
	 * @param queryString
	 *            查询语句
	 * @param paramValue
	 *            查询条件相对的值
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract Long getCount(String queryString, Object paramValue);

	/**
	 * 
	 * @方法说明:通过查询语句、查询条件及相对的值得到满足结束的条件
	 * @param queryString
	 *            查询条件
	 * @param paramValue
	 *            查询条件相对的值
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract Long getCount(String queryString, Object[] paramValue);

	/**
	 * 
	 * @方法说明:通过查询语句、查询条件及相对的值得到满足结束的条件
	 * @param queryString
	 *            查询语句
	 * @param paramName
	 *            查询条件
	 * @param paramValue
	 *            查询条件相对的值
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract Long getCount(String queryString, String[] paramName,
			Object[] paramValue);

	/**
	 * 
	 * @方法说明:得到此Class对象的条数
	 * @param c
	 *            Class对象
	 * @return
	 * @作者:徐龙
	 * @时间:May 15, 2011
	 */
	public abstract Long getCount(Class<T> c);

}
